<?php

namespace app\common;


use EasyWeChat\Factory;
use think\facade\Db;

/**
 * 微信小程序类
 */
class WxMini
{
    private $app;
    public function __construct(){
        //消息推送配置
        $config = Db::name('config_data')->where('config_id',5)->select()->toArray();
        $arr = [];
        foreach ($config as $k => $v) {
            if ($v['code'] != 'id') {
                $arr[$v['code']] = $v['value'];
            }
        }
        $this->app = Factory::miniProgram($arr);
    }


    /**
     * 消息推送
     * @param $touser 用户openid
     * @param $value 模板内容
     * @param $template_id 所需下发的订阅模板id
     * @param $page 点击模板卡片后的跳转页面，仅限本小程序内的页面。支持带参数,（示例index?foo=bar）。该字段不填则模板无跳转。
     */
    public function send_msg($touser,$value,$template_id,$page=''){
        $data = [
            'template_id' => $template_id, // 所需下发的订阅模板id
            'touser' => $touser,     // 接收者（用户）的 openid
            'page' => $page,       // 点击模板卡片后的跳转页面，仅限本小程序内的页面。支持带参数,（示例index?foo=bar）。该字段不填则模板无跳转。
            'data' => $value,// 模板内容，格式形如 { "key1": { "value": any }, "key2": { "value": any } }
        ];
        $res = $this->app->subscribe_message->send($data);
        if($res['errcode'] == 0){
            return ['code'=>true];
        }else{
            return ['code'=>false,'msg'=>"errcode=>{$res['errcode']},errmsg=>{$res['errmsg']}"];
        }
    }


    /**
     * 生成小程序太阳码
     * @param $path 路径 例(pages/index/index)
     * @param $param 参数 例(id=1&name=2)
     */
    public function getCode($path,$param){
        $response  = $this->app->app_code->getUnlimit($param,[
            'page'=>$path,
            'width'=>600
        ]);
        if($response instanceof \EasyWeChat\Kernel\Http\StreamResponse){
            $name = time().'_wx.jpg';
            $qr_path = './uploads/qrcode';
            if(!is_dir($qr_path)){
                mkdir(iconv('GBK','UTF-8',$qr_path),0777,true);
            }
            $filename = $response->saveAs($qr_path,$name);
            return ['code'=>true,'msg'=>$filename];
        }else{
            return ['code'=>false,'msg'=>$response];
        }
    }
}